import { createRouter, createWebHashHistory, createWebHistory } from "vue-router";

import { LOGIN_TIME_KEY, TOKEN_KEY } from "@/config/constants";

import { PageRouteEnum, routes } from "./routes";

const router = createRouter({
    history:
        import.meta.env.VITE_ROUTER_MODE === "hash"
            ? createWebHashHistory()
            : createWebHistory(import.meta.env.BASE_URL),
    routes
});

const title = import.meta.env.VITE_APP_TITLE ?? "";

/**
 * @description 路由拦截 beforeEach
 * */
router.beforeEach(async (to, from, next) => {
    // const globalStore = useGlobalStore();

    // 1.NProgress 开始
    // NProgress.start();

    // 2.动态设置标题

    document.title = to.meta.title ? `${title} | ${to.meta.title}` : title;

    // 登录校验
    if (to.meta.auth) {
        const token = localStorage.getItem(TOKEN_KEY);
        const loginTime = localStorage.getItem(LOGIN_TIME_KEY);

        // token 不存在 或者 登录时间超过 7 天（强制登出），都跳转到登录页
        if (!token || !loginTime || Date.now() - +loginTime > 7 * 24 * 60 * 60 * 1000) {
            localStorage.clear();
            return next({ path: PageRouteEnum.LOGIN });
        }
        // token 存不存在无法确定是否登录，它可能过期或乱写。这里仅过滤简单情况。
        // 核心处理是通过API请求的结果判断，然后在请求错误拦截中处理。如：axios 错误拦截中发现 401 就跳转到登录页。
    }

    next();
});

/**
 * @description 路由跳转结束
 * */
router.afterEach(() => {
    // NProgress.done();
});

export default router;
